
:- use_module(library(chr)).
:- use_module(library(clpfd)).
:- chr_constraint varchar/2,   len/2, eq/2, substr/4.

%attrib(A,0) <=> A=[],str([]).
%attrib(A,N) <=> N>0|  M is N-1, A=[X|Xs], str(A), attrib(Xs,M-1).

atrrib1 @ varchar(A,N) ==> genVar(A,N).

len1@ varchar(A,N) \ len(A,L)  <=> L #=< N, L#>=0.

 varchar(A,_N1), varchar(B,_N2),eq(A,B) <=> len(A,L), len(B,L), substr(A,1,L,C), substr(B,1,L,C).
 

 varchar(S,N) \  substr(S,Ini,Fin,T) <=> Ini#=<Fin, Ini#>0,Fin#=<N, getStr(S,Ini,Fin,T), M #= Fin - Ini+1, varchar(T,M).

genVar([],0).
genVar([_X|Xs],N) :- N#>0, M #= N-1, genVar(Xs,M).

getStr([A|B],I,E,[A]) :- I#=1, E#=1.
getStr([A|B],I,F,[A|C]) :-I #=1, F #>1, F2 #= F-1, getStr(B,I,F2,C).
getStr([A|B],F1,F,L) :- F1 #> 1, F2 #= F1-1, F3 #= F-1, getStr(B,F2,F3,L).
